const router = require('express').Router();
const captcha = require('svg-captcha');
const rateLimit = require('express-rate-limit');

const authController = require('../controllers/auth.controller'); // 引入控制器
const { client: redisClient } = require('../config/redis.config'); // 引入 Redis 客户端
const { authenticateToken, generateCaptcha } = require('../middlewares/auth.middleware');

// -----------------------------------------------------------
// 登录接口专用速率限制
// -----------------------------------------------------------
const loginLimiter = rateLimit({
    windowMs: 15 * 60 * 1000, // 15 分钟窗口
    max: 5, // 15 分钟内每个 IP 限制 5 次失败尝试
    message: '登录失败次数过多，请在 15 分钟后重试。',
    standardHeaders: true,
    legacyHeaders: false,
});

router.get('/captcha', async (req, res) => {
    // 保持为 async
    const { captchaId, img } = await generateCaptcha(); // <-- 调用 Service 生成

    res.type('svg');
    res.status(200).send({
        captchaId: captchaId,
        img: img,
    });
});

// -----------------------------------------------------------
// 认证接口
// -----------------------------------------------------------

/**
 * @route POST /api/auth/register
 * @desc 用户注册
 */
router.post('/register', authController.register);

/**
 * @route POST /api/auth/login
 * @desc 用户登录
 */
router.post('/login', loginLimiter, authController.login);

/**
 * @route POST /api/auth/logout
 * @desc 用户注销 (需要Token，但Token本身会被注销)
 * @access Private
 * 先验证 Token 有效性，再执行注销逻辑
 */
router.post('/logout', authenticateToken, authController.logout);

// 导出校验函数供登录Controller使用
module.exports = router;
